class Salida::PresenciaController < ApplicationController
  
  def producto
    @presencia = Presencia.find(params[:id])
    @orden = OrdenSalida.new
    @orden.centro = Centro.find(@presencia.centro_id)
    @orden.centro_id = @presencia.centro_id
    @orden.ejecutivo = Ejecutivo.find(session[:user])
    @orden.referencia_id = params[:id]
    @orden.tipo_referencia = OrdenSalida::TIPO_REFERENCIA[:presencia]
    @orden.domicilio = @orden.centro.domicilio
    @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
    marcas_presupuesto = Presupuesto.find(:all, :conditions => {:centro_id => @presencia.centro_id})
    @marcas_presupuesto = marcas_presupuesto.dup
    @marcas_presupuesto.each do |m|
      m.saldo_inicial = 0.0
    end
     
    @presencia.presencia_exhibiciones.each do |item|
      producto = Producto.find(item.producto_id)
      detalle = OrdenSalidaDetalle.new(:producto_id => item.producto_id,
        :costo_unitario => producto.costo_cuervo,
        :precio_ieps => producto.ieps,
        :precio_publico => producto.precio_publico,
        :cantidad => item.cantidad)
      
      @orden.orden_salida_detalles << detalle
    end

    @importe_costo = 0.0
    @importe_publico = 0.0
    @orden.orden_salida_detalles.each do |d|
      @importe_costo += (d.costo_unitario * d.cantidad)
      @importe_publico += (d.precio_publico * d.cantidad)
        
    end
    
  end
  
  def createp
    @orden = OrdenSalida.new(params[:orden])
    @presencia = Presencia.find(params[:id])
    @orden.centro = Centro.find(@presencia.centro_id)
    @orden.ejecutivo = Ejecutivo.find(session[:user])
    @orden.autorizar_id = Ejecutivo.find(session[:user]).reporta_a_id
    @orden.referencia_id = params[:id]
    @orden.tipo_referencia = OrdenSalida::TIPO_REFERENCIA[:presencia]
    @orden.presupuesto_suficiente = true
    
    # proceso de autorizacion vs presupuesto disponible
    marcas_presupuesto = params[:marcas][:presupuesto]
    
    # salida por bonificacion
    if @orden.tipo_presupuesto_id == 10
      @orden.presupuesto_suficiente = true
      @orden.status_id = 1
      # salida por patrocionio (presupuesto)
    elsif @orden.tipo_presupuesto_id == 20
      @orden.presupuesto_suficiente = validar_presupuestos(marcas_presupuesto)
      @orden.status_id = 1
      # solicitud de salida por 'on premise'
    elsif @orden.tipo_presupuesto_id == 30
      @orden.presupuesto_suficiente = true
      # status => 'solicitado'
      @orden.status_id = 0
    end

    if @orden.save
      flash[:notice] = "Orden de Salida Successfully created..."
      
      # verificar el tipo de presupuesto 
      # bolsa
      if @orden.tipo_presupuesto_id == 10
        bf = BonificacionDetalle.new
        bf.centro_id = @orden.centro_id
        bf.importe = @orden.monto_total_precio_publico
        bf.operacion = BonificacionDetalle::CARGO
        bf.referencia = @orden.consecutivo
        bf.destino_id = Bonificacion::ESPECIE

        bf.save
        
        # patrocinio
      elsif @orden.tipo_presupuesto_id == 20
        marcas_presupuesto = params[:marcas][:presupuesto]
        marcas_presupuesto.each do |p|
          if p[1][:saldo_inicial].to_f > 0.0
            create_cargo(p[0], p[1][:saldo_inicial])
            registrar_presupuesto(@orden, p[0])
          end
        end
                
      end
   
      redirect_to :controller => '/salida'
    else
      @presencia = Presencia.find(params[:id])
      @orden.centro = Centro.find(@presencia.centro_id)
      @orden.ejecutivo = Ejecutivo.find(session[:user])
      @orden.autorizar_id = Ejecutivo.find(session[:user]).reporta_a_id      
      @orden.referencia_id = params[:id]
      @orden.tipo_referencia = OrdenSalida::TIPO_REFERENCIA[:presencia]
      @orden.domicilio = @orden.centro.domicilio
      @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
      marcas_presupuesto = Presupuesto.find(:all, :conditions => {:centro_id => @presencia.centro_id})
      @marcas_presupuesto = marcas_presupuesto.dup
      @marcas_presupuesto.each do |m|
        m.saldo_inicial = 0.0
      end
      
      @importe_costo = 0.0
      @importe_publico = 0.0
      @orden.orden_salida_detalles.each do |d|
        @importe_costo += (d.costo_unitario * d.cantidad)
        @importe_publico += (d.precio_publico * d.cantidad)
        
      end

      render :action => "producto"
    end
    
  end

  def importe
    @presencia = Presencia.find(params[:id])
    @orden = OrdenSalida.new
    @orden.centro_id = @presencia.centro_id
    @orden.referencia_id = params[:id]
    @orden.tipo_referencia = OrdenSalida::TIPO_REFERENCIA[:presencia]
    @orden.domicilio = @orden.centro.domicilio
    @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
    marcas_presupuesto = Presupuesto.find(:all, :conditions => {:centro_id => @presencia.centro_id})
    @marcas_presupuesto = marcas_presupuesto.dup
    @marcas_presupuesto.each do |m|
      m.saldo_inicial = 0.0
    end
    
    
    @productos = Producto.find(:all, :conditions => {:empresa_id => 1, :status_id => 1})
    @productos.each do |p|
      detalle = OrdenSalidaDetalle.new(:producto_id => p.id,
        :costo_unitario => p.costo_cuervo,
        :precio_ieps => p.ieps,
        :precio_publico => p.precio_publico)
      @orden.orden_salida_detalles << detalle
    end
        
  end
  
  def createi
    @orden = OrdenSalida.new(params[:orden])
    @presencia = Presencia.find(params[:id])
    @orden.centro = Centro.find(@presencia.centro_id)
    @orden.ejecutivo = Ejecutivo.find(session[:user])
    @orden.autorizar_id = Ejecutivo.find(session[:user]).reporta_a_id
    @orden.referencia_id = params[:id]
    @orden.tipo_referencia = OrdenSalida::TIPO_REFERENCIA[:presencia]
    
    @orden.orden_salida_detalles.delete_if { |e| e.cantidad.blank? || e.cantidad == 0  }
    
    # proceso de autorizacion vs presupuesto disponible
    marcas_presupuesto = params[:marcas][:presupuesto]
    
    # salida por bonificacion
    if @orden.tipo_presupuesto_id == 10
      @orden.presupuesto_suficiente = true
      @orden.status_id = 1
      # salida por patrocionio (presupuesto)
    elsif @orden.tipo_presupuesto_id == 20
      @orden.presupuesto_suficiente = validar_presupuestos(marcas_presupuesto)
      @orden.status_id = 1
    elsif @orden.tipo_presupuesto_id == 30
      @orden.presupuesto.suficiente = true
      @orden.status_id = 0
    end

    if @orden.save
      flash[:notice] = "Orden de Salida Successfully created..."
      
      # verificar el tipo de presupuesto 
      # bolsa
      if @orden.tipo_presupuesto_id == 10
        bf = BonificacionDetalle.new
        bf.centro_id = @orden.centro_id
        bf.importe = @orden.monto_total_precio_publico
        bf.operacion = BonificacionDetalle::CARGO
        bf.referencia = @orden.consecutivo
        bf.destino_id = Bonificacion::ESPECIE

        bf.save
        
        # patrocinio
      elsif @orden.tipo_presupuesto_id == 20
        marcas_presupuesto = params[:marcas][:presupuesto]
        marcas_presupuesto.each do |p|
          if p[1][:saldo_inicial].to_f > 0.0
            create_cargo(p[0], p[1][:saldo_inicial])
            registrar_presupuesto(@orden, p[0])
          end
        end
        
      end

      redirect_to :controller => '/salida'
    else
      @presencia = Presencia.find(params[:id])
      @orden.centro = Centro.find(@presencia.centro_id)
      @orden.ejecutivo = Ejecutivo.find(session[:user])
      @orden.referencia_id = params[:id]
      @orden.tipo_referencia = OrdenSalida::TIPO_REFERENCIA[:presencia]
      @orden.domicilio = @orden.centro.domicilio
      @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
      marcas_presupuesto = Presupuesto.find(:all, :conditions => {:centro_id => @presencia.centro_id})
      @marcas_presupuesto = marcas_presupuesto.dup
      @marcas_presupuesto.each do |m|
        m.saldo_inicial = 0.0
      end

      render :action => "producto", :layout => true
    end
  end
  
  def create_cargo(presupuesto_id, importe_ieps)
    presupuesto = Presupuesto.find(presupuesto_id)
    cargo = PresupuestoDetalle.new(:operacion => PresupuestoDetalle::CARGO,
      :importe => importe_ieps)
    presupuesto.presupuesto_detalles << cargo
      
    presupuesto.save!
    
  end
  
  def presupuesto_changed
    logger.debug "params[:id] => #{params[:id]}"
    
    unless params[:id].nil?
      tipo_presupuesto = params[:id].to_i
      
      if tipo_presupuesto == 10 || tipo_presupuesto == 30
        logger.debug "apagar div marcas"
        render :update do |page|
          page.hide 'marcas'
        end
      else
        logger.debug "mostrar div marcas"
        render :update do |page|
          page.show 'marcas'
        end
      end
    end
  end
end
